home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1997 #1 / Amiga Plus CD - 1997 - No. 01.iso / pd / programmierung / proasm / routines / readargs.r < prev    next >
Text File  |  1993-05-22  |  3KB  |  163 lines

  1.  
  2. ;---;  readargs.r  ;-----------------------------------------------------------
  3. *
  4. *    ****    INTERFACE TO READARGS    ****
  5. *
  6. *    Author        Stefan Walter
  7. *    Version        1.01
  8. *    Last Revision    22.05.93
  9. *    Identifier    rda_defined
  10. *    Prefix        rda_    (ReadArgs)
  11. *                 ¯  ¯¯
  12. *    Functions    OpenArgs, CloseArgs, (GetOneArg)
  13. *
  14. *    Flags        rda_GETARG set 1 if GetOneArg also needed.
  15. *
  16. *    Note:    Dos.library should already be opened with OpenDosLib or
  17. *        by EasyLibraryHandler.
  18. *
  19. ;------------------------------------------------------------------------------
  20.  
  21. ;------------------
  22.     ifnd    rda_defined
  23. rda_defined    =1
  24.  
  25. ;------------------
  26. rda_oldbase    equ __base
  27.     base    rda_base
  28. rda_base:
  29.  
  30.     IFD     ely_defined
  31.     IFND    DOS.LIB
  32.     FAIL    dos.library needed: DOS.LIB SET 1
  33.     ENDIF
  34.     ENDIF
  35.  
  36. ;------------------
  37.  
  38. ;------------------------------------------------------------------------------
  39. *
  40. * OpenArgs    Prepare to read args later.
  41. *
  42. * INPUT:    a0    Template
  43. *        a1    Array of LONGS with enough of them!
  44. *
  45. * RESULT:    d0    0: Error, -1: OK
  46. *        ccr    On d0.
  47. *
  48. ;------------------------------------------------------------------------------
  49.  
  50. ;------------------
  51. OpenArgs:
  52.  
  53. ;------------------
  54. ; Do everything.
  55. ;
  56. \start:    movem.l    d1-a6,-(sp)
  57.     IFD     ely_defined
  58.     move.l    DosBase(pc),a6
  59.     ELSE
  60.     bsr    GetDosBase
  61.     ENDIF
  62.     move.l    a0,d1
  63.     move.l    a1,d2
  64.     moveq    #0,d3
  65.     jsr    -798(a6)        ;ReadArgs()
  66.     lea    rda_rdargs(pc),a0
  67.     move.l    d0,(a0)
  68.     movem.l    (sp)+,d1-a6
  69.     rts
  70.  
  71. ;------------------
  72.  
  73. ;------------------------------------------------------------------------------
  74. *
  75. * CloseArgs    Free RDArgs structure. Call is safe!
  76. *
  77. ;------------------------------------------------------------------------------
  78.  
  79. ;------------------
  80. CloseArgs:
  81.  
  82. ;------------------
  83. ; Do everything.
  84. ;
  85. \start:    movem.l    d0-a6,-(sp)
  86.     lea    rda_rdargs(pc),a0
  87.     move.l    (a0),d1
  88.     beq.s    \done
  89.     clr.l    (a0)
  90.     IFD     ely_defined
  91.     move.l    DosBase(pc),a6
  92.     ELSE
  93.     bsr    GetDosBase
  94.     ENDIF
  95.     jsr    -858(a6)        ;FreeArgs()
  96. \done:    movem.l    (sp)+,d0-a6
  97.     rts
  98.     
  99. ;------------------
  100.  
  101.     IFD    rda_GETARG
  102.  
  103. ;------------------------------------------------------------------------------
  104. *
  105. * GetOneArg    Get one argument from buffer.
  106. *
  107. * INPUT        a0    Template.
  108. *        a1    Buffer.
  109. *        a2    Keyword to search for.
  110. *
  111. * RESULT    d0    Contents of LONG, or 0.
  112. *        ccr    On d0.
  113. *
  114. ;------------------------------------------------------------------------------
  115.  
  116. ;------------------
  117. GetOneArg:
  118.  
  119. ;------------------
  120. ; Do everything.
  121. ;
  122. \start:    movem.l    d1-a6,-(sp)
  123.     IFD     ely_defined
  124.     move.l    DosBase(pc),a6
  125.     ELSE
  126.     bsr    GetDosBase
  127.     ENDIF
  128.     move.l    a1,a4
  129.     move.l    a0,d1
  130.     move.l    a2,d2
  131.     jsr    -804(a6)        ;FindArg()
  132.     moveq    #-1,d1
  133.     cmp.l    d1,d0
  134.     beq.s    \error
  135.     lsl.l    #2,d0
  136.     move.l    (a4,d0.l),d0
  137.     bra.s    \exit
  138.  
  139. \error:    moveq    #0,d0
  140. \exit:    movem.l    (sp)+,d1-a6
  141.     rts
  142.  
  143. ;------------------
  144.     ENDIF
  145.  
  146. ;--------------------------------------------------------------------
  147.  
  148. ;------------------
  149. rda_rdargs:    dc.l    0
  150.  
  151. ;------------------
  152.  
  153. ;--------------------------------------------------------------------
  154.  
  155. ;------------------
  156.     base    rda_oldbase
  157.  
  158. ;------------------
  159.     endif
  160.  
  161.     end
  162.  
  163.